前言
函式是JavaScript的最重要的一部份,所有的運作都是靠函式一個一個連接起來,就像是精密儀器的小小螺絲,微小但是很重要,跟鯊魚一起來看看Function函式吧!
概述
先前有簡略的帶過一次,函式的本質是當函式被呼叫的時候,會將內部Statements依序執行。
Function constructor(物件建構式)
在Global Object中有一個"Function" property,這個就是函式的原型建構式,創立一個新函式的時候都會繼承這個constructor(建構式),而正因為有constructor(建構式),創立新物件的也可以透過new去執行。
let shark = new Function();
shark
// ƒ anonymous(
// ) {
//
// }
// 回傳一個沒有內容的anonymous(匿名)函式
納入parameters參數跟運作的內容會變這樣
let shark = new Function( 參數a , 參數b , 運作的內容(Statements);
但是鯊魚不建議用上面的方法建構一個新的函式,那會看起來很亂,
通常鯊魚都是下面的方式來建立一個函式
- 宣告這是一個函式
- 給予這個函式一個名稱
- 納入運作時需要的參數
- 製作運作內容(Statements)
- 如果需要輸出結果就用return將結果輸出
2022/10/24補充
這種函式的製成被稱作 Function declarations(函式宣告)
還有另一個跟這個很像的 function expressions(函式表達式)
Properties of the Function Constructor
- Function.length
值為1,實際用途目前鯊魚無法理解。
- Function.prototype
後續會說到的物件Function.prototype的初始對象,
其內容為:
[[Writable]]: false,
[[Enumerable]]: false,
[[Configurable]]: false
Properties of the Function Prototype Object
- Function.prototype.apply ( thisArg, argArray )
Function.prototype表示函式名稱
thisArg表示呼叫函式內的this的對象,如果沒有可隨意填入一個任意的值,通常會填入null。
argArray表示參數的陣列。
當函式內有this,卻沒有相對應的參數時的一種執行函式的方式
- Function.prototype.bind ( thisArg, ...args )
...args表示多個參數。
跟上面不一樣的是apply是呼叫函式,bind是創建一個新函式。
使用這個方法創建的新函式是沒有原型對象的,所以不能使用函式原型的屬性。
- Function.prototype.call ( thisArg, ...args )
跟上面apply類似但是使用參數的形式不一樣。
apply的參數是一組陣列call則是直接接在thisArg後面,一個一個往後排
- Function.prototype.constructor
函式的原型結構
- Function.prototype.toString ( )
將函式的源碼(code)轉換成字串,
- Function.prototype [ @@hasInstance ] ( V )
A method that determines if a constructor object recognizes an object as one of the constructor's instances.
一種確定構造函數對像是否將對象識別為構造函數實例之一的方法。
目前鯊魚看不懂MDN也沒有相關的說明,等鯊魚有找到再向各位介紹
Function Instances(MDN提到的Function的Properties)
- length
回傳一個function的要調用的參數數量
function sharkPlus ( a , b ) {
return a + b
}
sharkPlus.length
// 2
// 因為有兩個參數所以回傳2
sharkPlus.name
// 'sharkPlus'
- prototype
回傳這個函式的全貌,除了繼承的函式建構式之外,也包含函式屬於自己的其他樣貌
結語
跟鯊魚看完這些,有沒有覺得"就這樣?",感覺還少說了甚麼東西,但是函式很多都是他的延伸概念,以及Statements編撰。
以基礎來說真的不多,但是他的延伸出來的花樣很多。
後面再為各位一一說明吧。
參考資料
bind, call, apply 的差異
EMCA262
MDN-Function